home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -in_the_mag- / reader_requests / wild / support / rawkeys.s < prev    next >
Text File  |  2000-02-23  |  3KB  |  154 lines

  1.  
  2.     include    escape:escape.gs
  3.  
  4. Exec    MACRO
  5.     movea.l    4.w,a6
  6.     ENDM
  7.  
  8. Dos    MACRO
  9.     movea.l    _DOSBase(pc),a6
  10.     ENDM
  11.  
  12. Call    MACRO
  13.     jsr    _LVO\1(a6)
  14.     ENDM
  15.  
  16.     Exec
  17.     lea.l    dosname(pc),a1
  18.     Call    OldOpenLibrary
  19.     move.l    d0,_DOSBase
  20.     
  21.     Dos
  22.     Call    Output
  23.     move.l    d0,_DefOut    
  24.     move.l    d0,d1
  25.     move.l    #HelloMessage,d2
  26.     move.l    #HelloEnd-HelloMessage,d3
  27.     Call    Write
  28.  
  29. Start    bsr    InitInputCatcher
  30. MouseW1    bsr    CheckPressed
  31.     btst    #6,$bfe001
  32.     bne.b    MouseW1
  33. MouseW2    bsr    CheckPressed
  34.     btst    #6,$bfe001
  35.     beq.b    MouseW2
  36.     bsr    FreeInputCatcher
  37.     
  38.     Exec
  39.     move.l    _DOSBase,a1
  40.     Call    CloseLibrary
  41.  
  42.     rts
  43.  
  44. Message    dc.b    'Pressed RawKey:$'
  45.     dc.b    '____'
  46. Number    dc.b    10,0
  47. Cyf    dc.b    '0123456789ABCDEF'
  48.  
  49. CheckPressed        move.w    KeyPressed(pc),d0
  50.             bne.b    CP_Some
  51.             rts
  52. CP_Some        lea.l    Number(pc),a0
  53.         lea.l    Cyf(pc),a1
  54.         moveq.l    #3,d1
  55. CP_WriteNumber    move.w    d0,d2
  56.         andi.w    #$f,d2
  57.         move.b    (a1,d2.w),-(a0)
  58.         lsr.w    #4,d0
  59.         dbra    d1,CP_WriteNumber
  60.         
  61.         Dos
  62.         move.l    _DefOut,d1
  63.         move.l    #Message,d2
  64.         moveq.l    #Cyf-Message,d3
  65.         Call    Write
  66.         rts
  67.  
  68.  
  69. FreeInputCatcher    Exec
  70.             move.l    IIC_InputIO,d7
  71.             beq.b    FIC_NoInpDevIO
  72.             movea.l    d7,a1
  73.             move.l    #INT_InputCatch,IO_DATA(a1)
  74.             move.w    #IND_REMHANDLER,IO_COMMAND(a1)
  75.             move.b    #IOF_QUICK,IO_FLAGS(a1)
  76.             Call    DoIO
  77.             movea.l    d7,a1
  78.             Call    CloseDevice
  79.             movea.l    d7,a0
  80.             Call    DeleteIORequest
  81. FIC_NoInpDevIO        move.l    IIC_MsgPort,d7
  82.             beq.b    FIC_NoInpMsgPort
  83.             movea.l    d7,a1
  84.             Call    RemPort
  85.             movea.l    d7,a0
  86.             Call    DeleteMsgPort
  87. FIC_NoInpMsgPort    rts
  88.  
  89. InitInputCatcher
  90.     Exec
  91.     Call    CreateMsgPort
  92.     move.l    d0,IIC_MsgPort
  93.     beq.b    IIC_Error
  94.     movea.l    d0,a1
  95.     move.l    d0,d7
  96.     Call    AddPort
  97.     movea.l    d7,a0
  98.     moveq.l    #IOSTD_SIZE,d0
  99.     Call    CreateIORequest
  100.     move.l    d0,IIC_InputIO
  101.     beq.b    IIC_Error
  102.     movea.l    d0,a1
  103.     move.l    d0,d7
  104.     moveq.l    #0,d0
  105.     lea.l    InputName,a0
  106.     move.l    d0,d1
  107.     Call    OpenDevice
  108.     tst.w    d0
  109.     bne.b    IIC_Error
  110.     movea.l    d7,a1
  111.     move.l    #INT_InputCatch,IO_DATA(a1)    
  112.     move.w    #IND_ADDHANDLER,IO_COMMAND(a1)
  113.     move.b    #IOF_QUICK,IO_FLAGS(a1)
  114.     Call    DoIO
  115.     tst.w    d0
  116.     bne.b    IIC_Error
  117.     moveq.l    #-1,d0
  118.     rts
  119.     
  120. IIC_Error    moveq.l    #0,d0
  121.         rts    
  122.         
  123. IIC_InputIO    dc.l    0
  124. IIC_MsgPort    dc.l    0
  125.  
  126. InputCatchCode        clr.w    (a1)    
  127. ICC_CheckForKey        cmp.b    #IECLASS_RAWKEY,ie_Class(a0)
  128.             bne.b    ICC_NextEvent
  129.             move.w    ie_Code(a0),d0
  130.             btst    #7,d0
  131.             bne.b    ICC_NextEvent
  132.             move.w    d0,(a1)
  133. ICC_NextEvent        movea.l    (a0),a0
  134.             move.l    a0,d0
  135.             bne.b    ICC_CheckForKey
  136.             moveq.l    #0,d0
  137.             rts
  138.             
  139. INT_InputCatch        dc.l    0,0
  140.             dc.b    NT_INTERRUPT
  141.             dc.b    69
  142.             dc.l    ICName
  143.             dc.l    KeyPressed,InputCatchCode
  144. KeyPressed        dc.w    0
  145.  
  146. _DOSBase    dc.l    0
  147. _DefOut        dc.l    0
  148. ICName        dc.b    'RawKey interceptor...',0
  149. dosname        dc.b    'dos.library',0
  150. InputName    dc.b    'input.device',0
  151.         dc.b    0,'$VER:'
  152. HelloMessage    dc.b    'RawKey 1.2 (20.11.1997)',10,10
  153.         dc.b    'Press mouse button to exit !',10,0
  154. HelloEnd